import Vue from 'vue'
import Vuex from 'vuex'

// 导入日志打印插件
import createLogger from 'vuex/dist/logger'
// 导入持久化插件
import createPersistedState from "vuex-persistedstate";
import { Toast } from 'vant';
// 导入封装好的axios
import { shop_favlist, shop_fav, shop_unfav, shopcart_list, shopcart_add, shopcart_clear, address_add } from '../utils/api'
// 导入路由
import $router from '../router/'
Vue.use(Vuex)

export default new Vuex.Store({
  state: {
    //收藏列表
    // 我的收藏组件在取数据时有的话就返回，没有则返回空数组
    // collectlist: localStorage.getItem('vuex') ? JSON.parse(localStorage.getItem('vuex')).collectlist : [],
    // 收藏列表
    collectlist: [],
    //用来存储购物车里的商品
    shopCartList: [],
    //用来存储历史搜素记录
    history: [],
    // 用来保存收货地址
    sitelist: []
  },
  getters: {
  },
  mutations: {
    // 收藏店铺
    collect(state, payload) {
      state.collectlist.push(payload);
      // 轻提示
      Toast({
        message: '收藏成功',
        icon: 'passed',
      });
      // 将数据存储到本地存储
      // localStorage.setItem('vuex', JSON.stringify(state))
    },

    // 取消店铺收藏，就要从数组中删除
    cancel_collect(state, payload) {
      var index = state.collectlist.findIndex((item) => {
        return item.mtWmPoiId == payload.mtWmPoiId;
      })
      // 如果返回值不等于-1，则表示找到
      if (index != -1) {
        // 将找到的店铺，在点击收藏按钮时，从数组里删掉
        state.collectlist.splice(index, 1);
        // 轻提示
        Toast({
          message: '取消收藏成功',
          icon: 'passed',
        });
      }
      // 将数据存储到本地存储
      // localStorage.setItem('vuex', JSON.stringify(state));
    },

    //保存从服务器获取的收藏列表vuex中收藏列表
    save_favlist(state, payload) {
      state.collectlist = payload;
    },

    // 保存从服务器获取的购物车列表到vuex中的购物车列表
    save_shopcartlist(state, payload) {
      state.shopCartList = payload;
    },

    // 加入购物车
    toShop(state, payload) {
      var index = state.shopCartList.findIndex((item) => {
        return item.id == payload.id;
      })
      if (index == -1) {
        var good = JSON.parse(JSON.stringify(payload))
        good.count = 1;
        state.shopCartList.push(good);
        Toast('加入购物车成功');
      } else {
        state.shopCartList[index].count++;
      }
    },

    // 减少商品数量
    shopSub(state, payload) {
      var index = state.shopCartList.findIndex((item) => {
        return item.id == payload.id;
      })
      if (index !== -1) {
        if (state.shopCartList[index].count > 1) {
          state.shopCartList[index].count--;
        } else {
          state.shopCartList.splice(index, 1);
        }
      }
    },

    // 清空商品
    clearshopcart(state) {
      state.shopCartList = [];
    },

    //保存收货地址
    savesite(state, payload) {
      state.sitelist.push(payload);
    },
    // 保存搜索记录
    search(state, payload) {
      state.history.push(payload)
    }
  },
  actions: {
    request_favlist(store) { //发请求获取服务器用户收藏店铺列表
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      // 发请求 获取当前用户的收藏列表
      shop_favlist({ userid }).then((res) => {
        store.commit('save_favlist', res.data.list)
      })
    },

    request_fav(store, payload) { //发请求收藏用户店铺
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shop_fav({ userid, shopid: payload.mtWmPoiId }).then((res) => {
        if (res.data.code == 200) {
          // 调用同步方法收藏到vuex中
          store.commit('collect', payload)
        }
      })
    },

    request_unfav(store, payload) { //发送请求取消收藏店铺
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shop_unfav({ userid, shopid: payload.mtWmPoiId }).then((res) => {
        if (res.data.code == 200) {
          // 调用同步方法取消收藏到vuex中
          store.commit('cancel_collect', payload)
        }
      })
    },

    request_shopCart(store) { //发送请求获取购物车列表
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_list({ userid }).then((res) => {
        if (res.data.code == 200) {
          // 将从服务器请求的数据存储到vuex
          store.commit('save_shopcartlist', res.data.list)
        }
      })
    },

    request_shopCartAdd(store, payload) { //发请求向购物车添加商品
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_add({ userid, goodid: payload.id }).then((res) => {
        if (res.data.code == 200) {
          store.commit('toShop', payload)
        }
      })
    },

    request_shopcartsub(store, payload) { //发送请求减少购物车商品数量
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_add({ userid, goodid: payload.id }).then((res) => {
        if (res.data.code == 200) {
          store.commit('shopSub', payload)
        }
      })
    },

    request_shopCartClear(store) { //发请求清空购物车
      // 获取本地存储中用户id
      var userid = JSON.parse(localStorage.getItem('userinfo')).id;
      shopcart_clear({ userid }).then((res) => {
        if (res.data.code == 200) {
          // 清空vuex中的商品
          store.commit('clearshopcart');
        }
      })
    },

    request_address(store, payload) { //发送请求保存地址
      address_add(payload).then((res) => {
        if (res.data.code == 200) {
          store.commit('savesite', payload)
          $router.push('mysite')
        } else {
          Toast('请不要添加空地址')
        }
      })
    }

  },
  modules: { //分模块处理
  },
  // 日志打印插件，可以看到数据存储的变化
  plugins: [createLogger(), createPersistedState()]

})
